package bean.dao;


import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;

import Entities.ManifiestoDeCarga;
import Entities.Sucursal;

public class ManifiestoDeCargaDAO extends HibernateDAO{
	private static ManifiestoDeCargaDAO instancia;
	private static SessionFactory sf;
	
	public static ManifiestoDeCargaDAO getInstancia(){
		if(instancia == null){
			sf = (HibernateDAO.getInstancia().getSession().getSessionFactory());
			instancia = new ManifiestoDeCargaDAO();
		} 
		return instancia;
	}
	
	public void altaManifiestoDeCarga(ManifiestoDeCarga c)
	{	
		Session s = HibernateDAO.getInstancia().getSession();
		Transaction t = s.beginTransaction();
		s.save(c);
		t.commit();	
	}
	
	public void bajaManifiestoDeCarga(int id)
	{
		Session s = HibernateDAO.getInstancia().getSession();
		Transaction t = s.beginTransaction();
		Query buscarManifiestoDeCarga =  s.createQuery("SELECT mc FROM ManifiestoDeCarga mc WHERE mc.Id = :id").setParameter("id",id);
		ManifiestoDeCarga mc = (ManifiestoDeCarga) buscarManifiestoDeCarga.uniqueResult();
        //Borro el objeto de persistencia
        s.delete(mc);
        t.commit();
	}
	
	//revisar
	public void actualizarManifiestoDeCarga(ManifiestoDeCarga c)
	{
		Session s = HibernateDAO.getInstancia().getSession();
		Transaction t = s.beginTransaction();
		//c.setId(c.getId());
		s.update(c);
		t.commit();
	}
	
	@SuppressWarnings("unchecked")
	public List<ManifiestoDeCarga> getManifiestosDeCargas(){
		Session s = HibernateDAO.getInstancia().getSession();
		Transaction t = s.beginTransaction();
		List<ManifiestoDeCarga> lista = s.createQuery("from ManifiestoDeCarga").list();		
		t.commit();
		return lista;
	}
	
	public ManifiestoDeCarga getManifiestoDeCarga(int id){
		Session s = HibernateDAO.getInstancia().getSession();
		Transaction t = s.beginTransaction();
		ManifiestoDeCarga c = (ManifiestoDeCarga) s.createQuery(" from ManifiestoDeCarga where id = :identificador").setParameter("identificador", id).uniqueResult();;		
		t.commit();
		return c;
	}

	public static void setSf(SessionFactory sf) {
		ManifiestoDeCargaDAO.sf = sf;
	}

	public static SessionFactory getSf() {
		return sf;
	}

	

}



